package codingPractice.xiaoHongShu;

import java.util.Arrays;
import java.util.Scanner;


/**
 * 小苯有一个长度为n的数组a,他定义了一个函数f:f(l, r)=\sum_{k=l}^{r} a_{k}即f(l,r)表示数组a在[l,r]这一段区间的区间和。
 * 现在小苯有一个重新任意排列数组a的机会，他想要最小化\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) 即最小化所有区间对应f的值之和，请你帮他算算最小的这个值吧。
 * 输入描述
 * 第一行输入一个正整数n(1≤n≤2×10^5)代表数组中元素的个数。
 * 第二行输入n个整数a1,a2,...an(1≤ai≤10^6)代表数组中的元素。
 * 输出描述
 * 在一行上输出一个整数，表示题中所求答案。
 * 输入3 1 2 3输出19
 * 说明
 * 重新排列为{2,1,3}，此时全部区间为[2]、[1]、[3]、[2,1]、[1,3]和[2,1,3]，总和恰好为19，
 * 可以证明这是最小的。
 */
public class LagestNum {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextInt()) {
            int n = sc.nextInt();
            int[] a = new int[n];
            for(int i=0;i<n;i++) {
                a[i] = sc.nextInt();
            }
            Arrays.sort(a);
            int[] rearranged = new int[n];
            int left = 0, right = n - 1;
            boolean placeLeft = true;
            for(int i=n-1; i>=0; i--) {
                if(placeLeft) {
                    rearranged[left] = a[i];
                    left++;
                } else {
                    rearranged[right] = a[i];
                    right--;
                }
                placeLeft = !placeLeft;
            }

            long totalSum = 0;
            for(int i=0;i<n;i++) {
                long currentSum = 0;
                for(int j=i;j<n;j++) {
                    currentSum += rearranged[j];
                    totalSum += currentSum;
                }
            }

            System.out.println(totalSum);
        }
    }
}
